package org.jeecg.modules.wms.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.wms.entity.FinishedGoodsInbound;
import org.jeecg.modules.wms.vo.FinishedGoodsInboundVO;
import org.jeecg.modules.wms.vo.InboundCreateVO;
import org.jeecg.modules.wms.vo.ProductionTaskVO;
import org.jeecg.modules.wms.vo.BatchInboundExecuteVO;

import java.util.List;

/**
 * 成品入库Service接口
 */
public interface IFinishedGoodsInboundService extends IService<FinishedGoodsInbound> {

    /**
     * 创建成品入库单
     */
    String createInbound(InboundCreateVO vo);

    /**
     * 执行成品入库（入库后更新订单状态为10已入库）
     */
    void executeInbound(String inboundId);

    /**
     * 检查订单是否可以入库（包装工种是否完成）
     */
    boolean checkOrderCanInbound(String orderId);

    /**
     * 查询入库单列表
     */
    IPage<FinishedGoodsInboundVO> queryInboundList(Page<FinishedGoodsInboundVO> page, FinishedGoodsInboundVO query);

    /**
     * 查询入库单详情
     */
    FinishedGoodsInboundVO queryInboundDetail(String id);

    /**
     * 更新订单状态为已入库
     */
    void updateOrderStatusToInbound(String orderId);

    /**
     * 生成入库单号
     */
    String generateInboundNo();

    /**
     * 生成入库批次号
     */
    String generateBatchNo();

    /**
     * 根据订单编号创建成品入库单
     */
    String createInboundByOrder(String orderNo, String productionPlanId);

    /**
     * 分批次执行成品入库
     * 支持多库位分配，自动处理库存变更、库位状态管理、入库单状态更新、订单状态更新等
     */
    void executeBatchInbound(BatchInboundExecuteVO vo);
}
